// 查找节点所有子节点
function addChildren(node, dataList) {
  const children = dataList
    .map((item) => ({
      ...item,
      meta: item.meta || {},
    }))
    .filter((item) => item.meta.parentPath === node.path)
    .sort((a, b) => a.meta.orderNo - b.meta.orderNo)
    .map((item) => addChildren(item, dataList));
  if (children.length) {
    return {
      ...node,
      redirect: children[0].path,
      children,
    };
  }
  return { ...node };
}

// 路由列表转换树形
export function arrayToTree(arr) {
  if (!Array.isArray(arr) || arr.length < 1) return null;
  // 获取首层节点数组
  const topNodes = arr
    .map((item) => ({
      ...item,
      meta: item.meta || {},
    }))
    .filter((item) => !item.meta.parentPath)
    .sort((a, b) => a.meta.orderNo - b.meta.orderNo);
  return topNodes.map((root) => addChildren(root, arr));
}

// 根据key获取当前节点
export function findNode(arr, key) {
  return arr.find((v) => v.path === key);
}

// 根据key获取当前节点父节点
export function findParentNode(arr, key) {
  const node = findNode(arr, key);
  const parentNode = arr.find((v) => v.path === node.meta?.parentPath);
  return parentNode;
}

// 根据key获取当前节点顶级节点
export function findTopNode(arr, key) {
  const parentNode = findParentNode(arr, key);
  if (parentNode) {
    return findTopNode(arr, parentNode.path);
  }
  return findNode(arr, key);
}

export function buildTreeByKeys(arr, keys) {
  if (!Array.isArray(arr) || arr.length < 1) return null;
  // 获取首层节点数组
  let topNodes = keys
    .map((key) => findTopNode(arr, key))
    .sort((a, b) => a.meta.orderNo - b.meta.orderNo);
  // 去重
  topNodes = topNodes.reduce((cur, next) => {
    const target = cur.find((v) => v.path === next.path);
    if (!target) {
      cur.push(next);
    }
    return cur;
  }, []);
  return topNodes.map((root) => addChildren(root, arr));
}
